-- UIBuyItemConfirm
-- Create by chengb Nov/25/2014
-- 购买物品提示框界面（适用于需要显示物品图标的情形，如：购买商品，学习技能）

-- UIBuyItemConfirm继承自Layer
UIBuyItemConfirm = class("UIBuyItemConfirm", function()
    return cc.Layer:create();
end)

-- @param itemName   物品名称
-- @param itemInfo   物品信息
-- @param rarity     物品稀有度
-- @param itemIcon   物品图标路径
-- @param costBrief  消耗简介
-- @param payAttrib  支付的属性(如：gem, money)
-- @param costAmount 支付的属性数量
-- @param okFunc     点击确认的处理函数
-- @param args       okFunc所需的参数列表（当参数超过1个时，这里通常传入table类型）
-- @param okText     确认按钮文本(默认显示'确认')
function UIBuyItemConfirm.create(itemName, itemInfo, rarity, itemIcon, costBrief, payAttrib, costAmount, okFunc, args, okText)
    return UIBuyItemConfirm.new(itemName, itemInfo, rarity, itemIcon, costBrief, payAttrib, costAmount, okFunc, args, okText);
end

-- 内部函数声明
local resize;
local redrawItemStar;

-- 构造函数
function UIBuyItemConfirm:ctor(itemName, itemInfo, rarity, itemIcon, costBrief, payAttrib, costAmount, okFunc, args, okText)
    -- 初始化
    local node = cc.CSLoader:createNode("layout/dialog/BuyItemConfirm.csb");
    self:addChild(node);

    local panel = findChildByName(node, "img_panel");

    -- 设置物品名称
    local itemNameLabel = panel:getChildByName("item_name");
    itemNameLabel:setString(itemName);
    itemNameLabel:setString(itemName);
    TextStyleM.setOutlineStyle(itemNameLabel);

    -- 设置物品信息
    local itemInfoLabel = panel:getChildByName("item_info");
    itemInfoLabel:setString(itemInfo);

    -- 设置物品稀有度
    local itemFrame = panel:getChildByName("item_frame");
    redrawItemStar(itemFrame, rarity);

    -- 设置物品图标
    local itemImg = findChildByName(panel, "item_frame/item_icon");
    itemImg = replaceImageView(itemImg);
    itemImg:loadTexture(itemIcon);

    -- 设置消耗物品名称（需要设置1像素描边）
    local costBar = panel:getChildByName("cost_bar");
    local costBriefLabel = costBar:getChildByName("cost_brief");
    costBriefLabel:setString(costBrief);
    TextStyleM.setOutlineStyle(costBriefLabel);

    -- 设置消耗的属性的图标
    local costImg = costBar:getChildByName("cost_img");
    if payAttrib == "money" then
        costImg:loadTexture(getMoneyIconPath());
    elseif payAttrib == "gem" then
        costImg:loadTexture(getGoldIconPath());
    else
        error("暂不支持支付属性：" .. payAttrib);
    end

    local costAmountLabel = costBar:getChildByName("amount");
    costAmountLabel:setString("" .. costAmount);

    local okBtn = panel:getChildByName("btn_ok");
    if type(okText) == 'string' then
        okBtn:setTitleText(okText);
    else
        okBtn:setTitleText("确认");
    end

    -- 注册确认按钮点击事件
    local function onOkClick(sender, eventType)
        if eventType == ccui.TouchEventType.ended then
            AudioM.playFx("button_select");
            UIMgr.getCurrentScene():removeDialog(self);
            if type(okFunc) == 'function' then
                okFunc(args);
            end
        end
    end
    okBtn:addTouchEventListener(onOkClick);

    -- 注册取消按钮点击事件
    local canelBtn = panel:getChildByName("btn_cancel")
    local function onCancelClick(sender, eventType)
        if eventType == ccui.TouchEventType.ended then
            AudioM.playFx("button_return");
            UIMgr.getCurrentScene():removeDialog(self);
        end
    end
    AddBackEventHandler(self, canelBtn, onCancelClick);

    -- 设置按钮标题的描边
    TextStyleM.setOutlineStyle(okBtn:getTitleRenderer());
    TextStyleM.setOutlineStyle(canelBtn:getTitleRenderer());

    -- 重新调整布局
    resize(node);
end

-- 显示商品星级（稀有度）
function redrawItemStar(starParent, rarity)
    -- 显示物品星级
    for i = 1, MAX_ITEM_RARITY do
        local star = starParent:getChildByName("star" .. i);
        if type(rarity) ~= "number" then
            star:setVisible(false);
        elseif i <= rarity then
            star:setVisible(true);
        else
            star:setVisible(false);
        end
    end
end

-- 重新调整布局
resize = function(node)
    local w = AlignM.frameSize.width;
    local h = AlignM.frameSize.height;

    -- bg居中显示并充满整个屏幕
    AlignM.fitToScreen(node, "bg");

    -- 确认框居中并缩放到合适大小
    AlignM.alignToCenter(node, "img_panel");
end

return UIBuyItemConfirm;

